Bài học Scratch cho học sinh THCS

Xây dựng bài quiz và quản lý ngân hàng câu hỏi

Học cách tạo trò chơi trắc nghiệm ôn tập — lưu hàng chục câu hỏi trong danh sách, chấm điểm tự động và báo kết quả cuối bài.

Quiz trong Scratch là gì?

Quiz (trắc nghiệm) là chương trình đặt câu hỏi, nhận câu trả lời của người dùng, rồi chấm đúng/sai và tính điểm. Trên Scratch, bạn có thể làm quiz Toán, Tiếng Anh, Tin học, Lịch sử… phục vụ ôn tập lớp hoặc chia sẻ với bạn bè.

Logo Scratch
Quiz kết hợp danh sách, biến, khối hỏi đáp và điều kiện — bài tập ứng dụng thực tế cho học sinh THCS
Ngân hàng câu hỏi Kho câu hỏi và đáp án lưu tập trung
Chấm tự động So sánh trả lời với đáp án đúng
Thống kê Điểm, tỷ lệ đúng, thời gian làm bài
💡 Ghi nhớ

Ngân hàng câu hỏi (question bank) là nơi bạn lưu toàn bộ câu hỏi — thêm câu mới chỉ cần bổ sung vào kho, không phải viết lại cả chương trình.

Thiết kế ngân hàng câu hỏi bằng danh sách

Cách phổ biến nhất: dùng hai danh sách song song — mỗi vị trí trong list câu hỏi khớp với cùng vị trí trong list đáp án.

Vị trí List cau_hoi List dap_an
1Thủ đô Việt Nam là?Hà Nội
22 + 2 = ?4
3Scratch do ai phát triển?MIT
Nhóm Biến và danh sách
Tạo list bằng Make a List — nhập câu hỏi trực tiếp hoặc thêm bằng khối lệnh

Nạp dữ liệu khi khởi động

khi nhấn cờ xanh
  xóa tất cả của [cau_hoi v]
  xóa tất cả của [dap_an v]
  thêm [Thủ đô VN là?] vào [cau_hoi v]
  thêm [Hà Nội] vào [dap_an v]
  thêm [2+2=?] vào [cau_hoi v]
  thêm [4] vào [dap_an v]

Hoặc gõ sẵn câu hỏi vào list khi soạn thảo — script chỉ cần xóa tất cả rồi nạp lại nếu muốn reset mỗi lần chạy.

⚠️ Quan trọng

Hai list phải cùng số mụcđúng thứ tự. Câu hỏi thứ 3 luôn đi với đáp án thứ 3 — nếu lệch, chấm điểm sẽ sai.

Biến điều khiển quiz

Ngoài list, cần vài biến theo dõi tiến trình:

khi nhấn cờ xanh
  đặt [diem v] thành [0]
  đặt [so_cau v] thành [1]
  đặt [tong_cau v] thành (độ dài của [cau_hoi v])
  hiện biến [diem v]

Đặt câu hỏi và nhận câu trả lời

Khối hỏi … và đợi (Sensing) hiện ô nhập liệu; giá trị người dùng gõ nằm trong khối reporter trả lời.

Nhóm khối Cảm biến
Khối "hỏi và đợi" cùng reporter "trả lời" dùng cho quiz nhập chữ
hỏi (phần tử (so_cau) của [cau_hoi v]) và đợi
nếu <(trả lời) = (phần tử (so_cau) của [dap_an v])> thì
  thay đổi [diem v] thêm [1]
  nói [Đúng rồi!] trong [1.5] giây
  phát tiếng [pop v]
kết thúc
nếu không thì
  nói (join [Sai! Đáp án: ] (phần tử (so_cau) của [dap_an v])) trong [2] giây
kết thúc
📌 Không phân biệt hoa thường

Dùng chữ thường của (trả lời) so với chữ thường của (phần tử …) — người chơi gõ "hà nội" vẫn được tính đúng nếu đáp án là "Hà Nội".

Duyệt hết ngân hàng câu hỏi

Gom logic trên vào vòng lặp — hỏi lần lượt từ câu 1 đến hết:

lặp đến khi <(so_cau) > (tong_cau)>
  hỏi (phần tử (so_cau) của [cau_hoi v]) và đợi
  nếu <… so sánh đáp án …> thì …
  thay đổi [so_cau v] thêm [1]
kết thúc
nói (join [Hết bài! Điểm: ] (diem)) trong [3] giây
💡 Ghi nhớ

Thêm đợi sau mỗi phản hồi đúng/sai để người chơi kịp đọc trước khi câu tiếp theo xuất hiện.

Chọn câu hỏi ngẫu nhiên

Thay vì hỏi theo thứ tự 1, 2, 3…, có thể rút ngẫu nhiên từ ngân hàng — phù hợp ôn tập nhiều lần không nhớ thứ tự câu.

đặt [so_cau v] thành (số ngẫu nhiên từ (1) đến (độ dài của [cau_hoi v]))
hỏi (phần tử (so_cau) của [cau_hoi v]) và đợi

Để không lặp câu trong một lượt chơi: tạo list da_hoi, mỗi lần rút kiểm tra da_hoi có chứa so_cau? — nếu có thì rút lại; sau khi hỏi xong thì thêm so_cau vào da_hoi.

📌 Quiz 10 câu từ kho 50 câu

Biến con_lai = 10. Vòng lặp: rút ngẫu nhiên → hỏi → chấm → giảm con_lai → dừng khi = 0. Ngân hàng lớn, mỗi lần chơi khác nhau.

Quiz trắc nghiệm A/B/C/D

Thay ô nhập chữ, dùng sprite nút cho từng đáp án. Mỗi câu có list lua_chon hoặc lưu 4 đáp án trong list riêng — đáp án đúng vẫn nằm ở dap_an.

Nhóm khối Sự kiện
Nút đáp án dùng "khi nhấn vào nhân vật" kết hợp broadcast

Báo cáo kết quả cuối bài

Sau khi hết câu, hiển thị tổng kết rõ ràng:

đặt [ty_le v] thành (join (làm tròn ((diem) / (tong_cau) * (100))) [%])
nói (join [Bạn đúng ] (join (diem) (join [ / ] (join (tong_cau) (join [ câu ( ] (join (ty_le) [) ])))))) trong [4] giây

Thêm nhận xét theo tỷ lệ: ≥ 80% → "Xuất sắc!"; ≥ 50% → "Khá tốt, ôn thêm nhé!"; < 50% → "Cố gắng lần sau!".

📌 Mở rộng
  • Đồng hồ đếm thời gian làm bài.
  • List chủ_de song song — lọc quiz theo môn (Toán / Tin / Anh).
  • Lưu điểm cao vào list bang_vang.

Quản lý và mở rộng ngân hàng

Thêm câu mới dễ dàng

Chỉ cần thêm … vào cau_hoithêm … vào dap_an cùng một chỗ (script khởi tạo hoặc file CSV import thủ công). Không sửa vòng lặp chấm điểm.

Tách theo chủ đề

Nhiều bộ list: toan_hoi + toan_an, tin_hoi + tin_an. Menu đầu game cho chọn chủ đề → gán list đang dùng vào biến hoặc broadcast tương ứng.

Kiểm tra chất lượng câu hỏi

💡 Ghi nhớ

Ngân hàng câu hỏi tốt = dữ liệu tách khỏi logic. Giống cách app thật lưu câu hỏi trong database, quiz Scratch lưu trong list — thêm câu không đụng code chấm điểm.

Dự án thực hành: Quiz Tin học 10 câu

📌 Gợi ý triển khai
  1. Tạo cau_hoidap_an — 10 câu về Scratch (khối, sprite, vòng lặp…).
  2. Biến diem, so_cau, tong_cau — hiển thị điểm trên sân khấu.
  3. Vòng lặp hỏi tuần tự; chấm có phản hồi âm thanh.
  4. Cuối bài: tỷ lệ % và lời khen theo mức điểm.
  5. Nút "Chơi lại" reset biến và so_cau về 1.
  1. Soạn 10 cặp câu hỏi–đáp án trên giấy trước.
  2. Nạp vào hai list, kiểm tra đủ 10 mục mỗi list.
  3. Viết vòng lặp hỏi–chấm–tăng chỉ số.
  4. Thêm màn kết quả và âm thanh.
  5. Nhờ 2 bạn làm thử — câu nào gây hiểu nhầm thì sửa ngân hàng.